package com.zhoug.common3.utils;

import android.graphics.Paint;
import android.text.TextUtils;
import android.widget.TextView;

/**
 * EditText 输入工具
 *
 * @Author 35574
 * @Date 2020/11/19
 * @Description
 * @see {@link com.zhoug.common3.utils.TextUtils}
 * @deprecated
 */
@Deprecated
public class EditUtils {
    private static final String TAG = ">>>EditUtils";
    private static final boolean DEBUG = false;

    /**
     * 获取到输入的值(默认去掉2端的空格) 为空则返回null
     *
     * @param textView
     * @return
     * @see #getTextOrNull(TextView, boolean)
     */
    public static String getTextOrNull(TextView textView) {
        return getTextOrNull(textView, true);
    }

    /**
     * 获取到输入的值 为空则返回null
     *
     * @param textView
     * @param trim     是否去掉前后空格
     * @return
     */
    public static String getTextOrNull(TextView textView, boolean trim) {
        if (textView == null || textView.getText() == null) return null;
        String s = textView.getText().toString();
        if (trim) {
            s = s.trim();
        }
        if (TextUtils.isEmpty(s)) {
            return null;
        }
        return s;
    }

    /**
     * 获取输入的{@link Integer}数据
     *
     * @param textView
     * @return {@link Integer}
     */
    public static Integer getInteger(TextView textView) {
        String text = getTextOrNull(textView, true);
        if (text == null) {
            return null;
        }
        try {
            return Integer.parseInt(text);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取输入的{@link Long}数据
     *
     * @param textView
     * @return {@link Long}
     */
    public static Long getLong(TextView textView) {
        String text = getTextOrNull(textView, true);
        if (text == null) {
            return null;
        }
        try {
            return Long.parseLong(text);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取输入的{@link Double}数据
     *
     * @param textView
     * @return {@link Double}
     */
    public static Double getDouble(TextView textView) {
        String text = getTextOrNull(textView, true);
        if (text == null) {
            return null;
        }
        try {
            return Double.parseDouble(text);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取输入的{@link Float}数据
     *
     * @param textView
     * @return {@link Float}
     */
    public static Float getFloat(TextView textView) {
        String text = getTextOrNull(textView, true);
        if (text == null) {
            return null;
        }
        try {
            return Float.parseFloat(text);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 给定最大宽度,计算出文字的最佳大小(刚好显示全部文字)
     * @param textSize 默认文字大小
     * @param maxWidth 文字的最大宽度
     * @param text 文本
     * @param paint 画笔
     * @return
     */
    public static float ensureTextSize(float textSize, int maxWidth, String text, Paint paint) {
        if (paint == null) {
            paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        }
        paint.setTextSize(textSize);
        float textWidth = paint.measureText(text);
        if (textWidth > maxWidth) {
            return ensureTextSizeSmall(textSize, maxWidth, text, paint);
        } else if (textWidth < maxWidth) {
            return ensureTextSizeBigger(textSize, maxWidth, text, paint);
        }
        return textSize;
    }


    /**
     * 测量能够完全显示全部文字时的文字大小
     *
     * @param textSize 默认文字大小
     * @param maxWidth 最大宽度
     * @param text     文字
     * @param paint    画笔
     * @return <=textSize
     */
    private static float ensureTextSizeSmall(float textSize, int maxWidth, String text, Paint paint) {
        if (paint == null) {
            paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        }
        paint.setTextSize(textSize);
        float textWidth = paint.measureText(text);
        if (textWidth > maxWidth) {
            textSize -= 2;
            return ensureTextSizeSmall(textSize, maxWidth, text, paint);
        }
        if (DEBUG) {
            LogUtils.d(TAG, "ensureTextSizeSmall:textSize="+textSize);
        }
        return textSize;
    }


    /**
     * @param textSize 默认文字大小
     * @param maxWidth 最大宽度
     * @param text     文字
     * @param paint    画笔
     * @return >=textSize
     */
    private static float ensureTextSizeBigger(float textSize, int maxWidth, String text, Paint paint) {
        if (paint == null) {
            paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        }
        paint.setTextSize(textSize);
        float textWidth = paint.measureText(text);
        if (textWidth < maxWidth) {
            textSize += 2;
            return ensureTextSizeBigger(textSize, maxWidth, text, paint);
        }
        textSize -= 2;
        if (DEBUG) {
            LogUtils.d(TAG, "ensureTextSizeBigger:textSize="+textSize);
        }
        return textSize;
    }

}
